home *** CD-ROM | disk | FTP | other *** search
/ Dynamic HTML Construction Kit / Dynamic HTML Construction Kit.iso / earthlink / nscomm / java40.jar / java / text / MergeCollation.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-11-03  |  3.0 KB  |  169 lines

  1. package java.text;
  2.  
  3. import java.util.Vector;
  4.  
  5. final class MergeCollation {
  6.    Vector patterns = new Vector();
  7.    PatternEntry lastEntry;
  8.    private byte[] statusArray = new byte[8192];
  9.    private int lastIndex = -1;
  10.    private final byte BITARRAYMASK = 1;
  11.  
  12.    public MergeCollation(String var1) throws ParseException {
  13.       for(int var2 = 0; var2 < this.statusArray.length; ++var2) {
  14.          this.statusArray[var2] = 0;
  15.       }
  16.  
  17.       this.setPattern(var1);
  18.    }
  19.  
  20.    public String getPattern() {
  21.       return this.getPattern(true);
  22.    }
  23.  
  24.    public String getPattern(boolean var1) {
  25.       StringBuffer var2 = new StringBuffer();
  26.  
  27.       for(int var3 = 0; var3 < this.patterns.size(); ++var3) {
  28.          PatternEntry var4 = (PatternEntry)this.patterns.elementAt(var3);
  29.          if (var4.extension.length() != 0) {
  30.             var4.addToBuffer(var2, false, var1, this.findLastWithNoExtension(var3));
  31.          } else {
  32.             var4.addToBuffer(var2, false, var1, (PatternEntry)null);
  33.          }
  34.       }
  35.  
  36.       return var2.toString();
  37.    }
  38.  
  39.    public String emitPattern() {
  40.       StringBuffer var1 = new StringBuffer();
  41.  
  42.       for(int var2 = 0; var2 < this.patterns.size(); ++var2) {
  43.          PatternEntry var3 = (PatternEntry)this.patterns.elementAt(var2);
  44.          var3.chars.charAt(0);
  45.          var1.append(var3.toString());
  46.       }
  47.  
  48.       return var1.toString();
  49.    }
  50.  
  51.    public void setPattern(String var1) throws ParseException {
  52.       this.patterns.removeAllElements();
  53.       this.addPattern(var1);
  54.    }
  55.  
  56.    public void addPattern(String var1) throws ParseException {
  57.       if (var1 != null) {
  58.          int var2 = 0;
  59.  
  60.          while(true) {
  61.             PatternEntry var3 = new PatternEntry();
  62.             var2 = var3.getNextEntry(var1, var2);
  63.             if (var2 < 0) {
  64.                return;
  65.             }
  66.  
  67.             this.fixEntry(var3);
  68.          }
  69.       }
  70.    }
  71.  
  72.    public int getCount() {
  73.       return this.patterns.size();
  74.    }
  75.  
  76.    public PatternEntry getItemAt(int var1) {
  77.       return (PatternEntry)this.patterns.elementAt(var1);
  78.    }
  79.  
  80.    private final PatternEntry findLastWithNoExtension(int var1) {
  81.       --var1;
  82.  
  83.       while(var1 >= 0) {
  84.          PatternEntry var2 = (PatternEntry)this.patterns.elementAt(var1);
  85.          if (var2.extension.length() == 0) {
  86.             return var2;
  87.          }
  88.  
  89.          --var1;
  90.       }
  91.  
  92.       return null;
  93.    }
  94.  
  95.    private final void fixEntry(PatternEntry var1) throws ParseException {
  96.       if (var1.strength != -2) {
  97.          int var2 = -1;
  98.          boolean var3 = false;
  99.          if (var1.chars.length() == 1) {
  100.             var3 = true;
  101.             var2 = var1.chars.charAt(0) / 8;
  102.             if ((this.statusArray[var2] & (byte)(1 << var1.chars.charAt(0) % 8)) != 0) {
  103.                var3 = false;
  104.                this.patterns.removeElement(var1);
  105.                this.lastIndex = this.patterns.indexOf(this.lastEntry);
  106.             }
  107.          } else {
  108.             var2 = this.patterns.indexOf(var1);
  109.             if (var2 != -1) {
  110.                this.patterns.removeElementAt(var2);
  111.             }
  112.          }
  113.  
  114.          StringBuffer var4 = new StringBuffer();
  115.          this.lastIndex = this.findLastEntry(this.lastEntry, var4);
  116.          if (var4.length() != 0) {
  117.             var1.extension = var4 + var1.extension;
  118.          }
  119.  
  120.          this.patterns.insertElementAt(var1, this.lastIndex);
  121.          if (var3) {
  122.             byte[] var10000 = this.statusArray;
  123.             var10000[var2] |= (byte)(1 << var1.chars.charAt(0) % 8);
  124.          }
  125.       } else {
  126.          this.lastIndex = this.patterns.indexOf(var1);
  127.       }
  128.  
  129.       this.lastEntry = var1;
  130.    }
  131.  
  132.    private final int findLastEntry(PatternEntry var1, StringBuffer var2) throws ParseException {
  133.       if (var1 == null) {
  134.          return 0;
  135.       } else if (var1.strength != -2) {
  136.          int var5 = -1;
  137.          if (var1.chars.length() == 1) {
  138.             int var6 = var1.chars.charAt(0) / 8;
  139.             if ((this.statusArray[var6] & (byte)(1 << var1.chars.charAt(0) % 8)) != 0) {
  140.                var5 = this.lastIndex + 1;
  141.             }
  142.          } else {
  143.             var5 = this.patterns.indexOf(var1) + 1;
  144.          }
  145.  
  146.          if (var5 == -1) {
  147.             throw new ParseException("couldn't find last entry: " + var1, var5);
  148.          } else {
  149.             return var5;
  150.          }
  151.       } else {
  152.          int var3;
  153.          for(var3 = this.patterns.size() - 1; var3 >= 0; --var3) {
  154.             PatternEntry var4 = (PatternEntry)this.patterns.elementAt(var3);
  155.             if (var4.chars.regionMatches(0, var1.chars, 0, var4.chars.length())) {
  156.                var2.append(var1.chars.substring(var4.chars.length(), var1.chars.length()));
  157.                break;
  158.             }
  159.          }
  160.  
  161.          if (var3 == -1) {
  162.             throw new ParseException("couldn't find: " + var1, var3);
  163.          } else {
  164.             return var3 + 1;
  165.          }
  166.       }
  167.    }
  168. }
  169.